Published 2022-04-14
Node.js - File System
Node.js
提供了一个fs
模块,用于操作文件系统。通过fs
模块,可以读取文件,创建文件,删除文件,移动文件,复制文件等。
const fs = require('fs')
sync 和 async
fs
模块中的每个方法都有sync
和async
两种形式。异步方法会返回一个Promise
对象,而同步方法会返回一个callback
。
echo "hello world" > demo.txt
const fs = require('fs')
// 异步读取文件
fs.readFile('demo.txt', function (err, data) {
if (err) {
return console.error(err)
}
console.log('Asynchronous read: ' + data.toString())
})
// 同步读取文件
var data = fs.readFileSync('demo.txt')
console.log('Synchronous read: ' + data.toString())
console.log('Program Ended')
打开文件
语法:fs.open(path, flags, [mode], callback)
path
: 文件路径flags
: 打开文件的方式,可以是r
,r+
,w
,w+
,a
,a+
,x
,x+
,t
,t+
,c
,c+
mode
: 打开文件的模式,默认是0o666
callback
: 回调函数,参数为 err,fd
const fs = require('fs')
fs.open('demo.txt', 'r', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('文件打开成功,文件描述符:' + fd)
})
获取文件信息
语法:fs.stat(path, callback)
path
: 文件路径callback
: 回调函数,参数为 err,stats
方法:
stats.isFile()
: 判断是否是文件stats.isDirectory()
: 判断是否是目录stats.isBlockDevice()
: 判断是否是块设备stats.isCharacterDevice()
: 判断是否是字符设备stats.isSymbolicLink()
: 判断是否是符号链接stats.isFIFO()
: 判断是否是 FIFO,如果是 FIFO,则返回 true,否则返回 falsestats.isSocket()
: 判断是否是 Socket
const fs = require('fs')
fs.stat('demo.txt', function (err, stats) {
if (err) {
return console.error(err)
}
console.log(stats)
console.log('文件类型:' + stats.isFile())
console.log('文件大小:' + stats.size)
console.log('文件创建时间:' + stats.birthtime)
})
写入文件
语法:fs.writeFile(file, data, [options], callback)
file
: 文件路径data
: 写入的数据options
: 可选参数,可以是encoding
,mode
,flag
callback
: 回调函数,参数为 err
const fs = require('fs')
fs.writeFile('demo.txt', '我是写入的文件内容', function (err) {
if (err) {
return console.error(err)
}
console.log('数据写入成功!')
console.log('--------我是分割线-------------')
console.log('读取写入的数据!')
fs.readFile('demo.txt', function (err, data) {
if (err) {
return console.error(err)
}
console.log('异步读取文件数据: ' + data.toString())
})
})
读取文件
语法:fs.read(fd, buffer, offset, length, position, callback)
fd
:返回的文件描述符buffer
:数据被写入的缓冲区offset
:缓冲区写入的偏移位置length
:读取的字节数position
:从哪里开始读取callback
:err
、bytesRead
、buffer
var fs = require('fs')
var buf = new Buffer(1024)
console.log('Going to open an existing file')
fs.open('input.txt', 'r+', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('File opened successfully!')
console.log('Going to read the file')
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
if (err) {
console.log(err)
}
console.log(bytes + ' bytes read')
// Print only read bytes to avoid junk.
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString())
}
})
})
关闭文件
语法:fs.close(fd, callback)
fd
:返回的文件描述符callback
:回调函数,参数为 err
const fs = require('fs')
fs.open('demo.txt', 'r', function (err, fd) {
if (err) {
return console.error(err)
}
console.log('文件打开成功,文件描述符:' + fd)
fs.close(fd, function (err) {
if (err) {
return console.error(err)
}
console.log('文件关闭成功!')
})
})
删除文件
语法:fs.unlink(path, callback)
path
:文件路径callback
:回调函数,参数为 err
const fs = require('fs')
fs.unlink('demo.txt', function (err) {
if (err) {
return console.error(err)
}
console.log('文件删除成功!')
})
创建目录
语法:fs.mkdir(path, [mode], callback)
path
:目录路径mode
:目录权限callback
:回调函数,参数为 err
const fs = require('fs')
fs.mkdir('/tmp/test', function (err) {
if (err) {
return console.error(err)
}
console.log('目录创建成功!')
})
读取目录
语法:fs.readdir(path, callback)
path
:目录路径callback
:回调函数,参数为 err、files
const fs = require('fs')
fs.readdir('/tmp', function (err, files) {
if (err) {
return console.error(err)
}
files.forEach(function (file) {
console.log(file)
})
})
阅读目录
语法:fs.readdirSync(path)
path
:目录路径
const fs = require('fs')
fs.readdirSync('/tmp')
删除目录
语法:fs.rmdir(path, callback)
path
:目录路径callback
:回调函数,参数为 err
const fs = require('fs')
fs.rmdir('/tmp/test', function (err) {
if (err) {
return console.error(err)
}
console.log('目录删除成功!')
})
Comments
No Comments!